﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Messaging;

namespace ProyectoAlmacen
{
    /// <summary>
    /// Descripción resumida de TestMensajeria
    /// </summary>
    [TestClass]
    public class TestMensajeria
    {

        [TestMethod]
        public void TestEncolarInsertUpdateProveedor()
        {

            string rutaCola = @".\private$\jvasquez";
            if (!MessageQueue.Exists(rutaCola))
            {
                MessageQueue.Create(rutaCola);
                MessageQueue cola = new MessageQueue(rutaCola);
                Message mensaje = new Message();
                mensaje.Label = "Insert Proveedor";
                mensaje.Body = new Proveedor { idProveedor = 10, RucDni = "20768846537", NombreRazon = "TECPERU S.R.L.", Estado = 1, idUsuario = 1 };
                cola.Send(mensaje);
                Console.ReadLine();
                cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(Proveedor) });
                Message mensajeRecibido = cola.Receive();
                Proveedor proveedorMensaje = (Proveedor)mensajeRecibido.Body;
                Assert.AreEqual("TECPERU S.R.L.", proveedorMensaje.NombreRazon);


            }
            else
            {

                
                MessageQueue cola = new MessageQueue(rutaCola);
                Message mensaje = new Message();
                mensaje.Label = "Insert Proveedor";
                mensaje.Body = new Proveedor { idProveedor = 10, RucDni = "20768846537", NombreRazon = "TECPERU S.R.L.", Estado = 1, idUsuario = 1 };
                cola.Send(mensaje);
                Console.ReadLine();
                cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(Proveedor) });
                Message mensajeRecibido = cola.Receive();
                Proveedor proveedorMensaje = (Proveedor)mensajeRecibido.Body;
                Assert.AreEqual("TECPERU S.R.L.", proveedorMensaje.NombreRazon);
            
            
            }
            
        }

        public void TestEncolarDeleteProveedor()
        {

            string rutaCola = @".\private$\jvasquez";
            if (!MessageQueue.Exists(rutaCola))
            {
                MessageQueue.Create(rutaCola);
                MessageQueue cola = new MessageQueue(rutaCola);
                Message mensaje = new Message();
                mensaje.Label = "Delete Proveedor";
                mensaje.Body = "10"; //Codigo de Proveedor a Eliminar
                cola.Send(mensaje);
                Console.ReadLine();
                cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                Message mensajeRecibido = cola.Receive();
                string proveedorMensaje = (string)mensajeRecibido.Body;
                Assert.AreEqual("10", proveedorMensaje);


            }
            else
            {


                
                MessageQueue cola = new MessageQueue(rutaCola);
                Message mensaje = new Message();
                mensaje.Label = "Delete Proveedor";
                mensaje.Body = "10"; //Codigo de Proveedor a Eliminar
                cola.Send(mensaje);
                Console.ReadLine();
                cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                Message mensajeRecibido = cola.Receive();
                string proveedorMensaje = (string)mensajeRecibido.Body;
                Assert.AreEqual("10", proveedorMensaje);


            }

        }

        public void TestEncolarListarProveedor()
        {

            string rutaCola = @".\private$\jvasquez";
            if (!MessageQueue.Exists(rutaCola))
            {
                MessageQueue.Create(rutaCola);
                MessageQueue cola = new MessageQueue(rutaCola);
                Message mensaje = new Message();
                mensaje.Label = "Proveedor";
                mensaje.Body = new Proveedor { idProveedor = 10, RucDni = "20768846537", NombreRazon = "TECPERU S.R.L.", Estado = 1, idUsuario = 1 };
                cola.Send(mensaje);
                mensaje.Label = "Proveedor";
                mensaje.Body = new Proveedor { idProveedor = 11, RucDni = "20545568736", NombreRazon = "TISOLUTIONS S.R.L.", Estado = 1, idUsuario = 1 };
                cola.Send(mensaje);
                mensaje.Label = "Proveedor";
                mensaje.Body = new Proveedor { idProveedor = 12, RucDni = "20563404004", NombreRazon = "SOEN PERU SAC", Estado = 1, idUsuario = 1 };
                cola.Send(mensaje);
                Console.ReadLine();
                cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(Proveedor) });  
                Message[] msgs = cola.GetAllMessages();
                int contador = 0;
                foreach (Message msg in msgs)
                {
                    contador = contador + 1;


                }
                Assert.AreEqual(msgs.Length, contador);

                
                


            }
            else
            {


                
                MessageQueue cola = new MessageQueue(rutaCola);
                Message mensaje = new Message();
                mensaje.Label = "Proveedor";
                mensaje.Body = new Proveedor { idProveedor = 10, RucDni = "20768846537", NombreRazon = "TECPERU S.R.L.", Estado = 1, idUsuario = 1 };
                cola.Send(mensaje);
                mensaje.Label = "Proveedor";
                mensaje.Body = new Proveedor { idProveedor = 11, RucDni = "20545568736", NombreRazon = "TISOLUTIONS S.R.L.", Estado = 1, idUsuario = 1 };
                cola.Send(mensaje);
                mensaje.Label = "Proveedor";
                mensaje.Body = new Proveedor { idProveedor = 12, RucDni = "20563404004", NombreRazon = "SOEN PERU SAC", Estado = 1, idUsuario = 1 };
                cola.Send(mensaje);
                Console.ReadLine();
                cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(Proveedor) });
                Message[] msgs = cola.GetAllMessages();
                int contador = 0;
                foreach (Message msg in msgs)
                {
                    contador = contador + 1;


                }
                Assert.AreEqual(msgs.Length, contador);


            }

        }
    }
}
